//import store from "../store";
//import router from "../router";

// 配置API接口地址
var rooturl = "/api";//用proxy实现本地代理跨域（生产环境使用的是nginx）
var imgproxy = "/images";
// 引用axios
var axios = require("axios");
const debug = process.env.NODE_ENV !== 'production'
// http request 拦截器
//var storeTemp=store;
axios.interceptors.request.use(
  config => {
    if(debug)  console.log(config.params);
    if(!config.headers['Content-Type']){
      config.headers = {
        'Content-Type':'application/json',
      };
    }
    /*if (storeTemp.state.token) {
      // 判断是否存在token，如果存在的话，则每个http header都加上token
      config.headers.Authorization ="Bearer "+ storeTemp.state.token;
    }*/
    return config;
  },
  err => {
    return Promise.reject(err);
  }
);
// http response 拦截器
axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 返回 401 清除token信息并跳转到登录页面
          
      }
    }
    return Promise.reject(error.response.data); // 返回接口返回的错误信息
  }
);

function apiAxios(method, url, params, success, failure) {
  if (params && typeof params === 'object') {
    //if(method === 'GET') {
    //  const paramArray = [];
    //  Object.keys(params).forEach(key => paramArray.push(key + '=' + params[key]));
    //  if (url.indexOf('?') === -1) {
    //    url += '?' + paramArray.join('&');
    //  } else {
    //    url = '&' + paramArray.json('&');
    //  }
    //} else
    if(method === 'POST') params = JSON.stringify(params);
  } 
  axios({
    method: method,
    url: url,
    data: method === "POST" || method === "PUT" ? params : null,
    params: method === "GET" || method === "DELETE" ? params : null,
    baseURL: rooturl,
    // `headers` 是即将被发送的自定义请求头
    withCredentials: false
  }).then(function(res) {
    //console.log(res.data);
    if(res.data.state !== 200) {
      if(failure) {
        //DavidLee 对Api调用返回报错细分： 
        // 1:常规error,warning错误则返回回调函数错误信息
        // 2:404, 308(Redirect)错误则返回回调函数错误对象 : 包含错误码 state 及 extradata
        if(res.data.state === 404 || res.data.state === 308) failure(res.data)
        else failure(res.data.message);
      } else console.error(res.data.message)
        
    } else {
      if(success) 
        success(res.data);
    }
  }).catch(function(err) {
    if (err) {
      console.error(err);
    }
  });
}

// 返回在vue模板中的调用接口
export default {
  get: function(url, params, success, failure) {
    return apiAxios("GET", url, params, success, failure);
  },
  post: function(url, params, success, failure) {
    return apiAxios("POST", url, params, success, failure);
  },
  put: function(url, params, success, failure) {
    return apiAxios("PUT", url, params, success, failure);
  },
  delete: function(url, params, success, failure) {
    return apiAxios("DELETE", url, params, success, failure);
  }
};